#ifndef NODO_H_
#define NODO_H_

#include <list>

#include "Tokem.h"
#include "definicoes.h"

class Nodo
{
public:
	Nodo();
	Nodo(Tokem *token);
	Nodo(NAO_TERMINAIS nTerminal);
	
	// a forma mais correta, seria armazenar dois ponteiros de tokens aqui, um tokenlido e um tokenesperado
	// opositalmente a forma atual de armazenar o valor do token como valorlido e valoresperado, isso para
	// que o erro tivesse mais detalhamento.
	void Erro(Tokem *token, PAL_RESERVADAS esperado, ERROS tipo);
	void Erro(Tokem *token, SIMBOLOS esperado, ERROS tipo);
	void Erro(Tokem *token, TIPOS_TOKENS esperado, ERROS tipo);
	void Erro(Tokem *token, ERROS tipo);
	
	virtual ~Nodo();
	
	bool isTerminal;

	// se terminal sera um token da lista de tokens
	Tokem *token;
	
	// se nao-terminal usa-se as definicoes
	NAO_TERMINAIS nTerminal;
	
	// para checagem de erros			 	 
	ERROS erro;
	
	// lista para os filhos
	std::list<Nodo> *filhos;

};

#endif /*NODO_H_*/
